/*
 * Gestion du multi-threading pour le brute forcer md5.
 */

#ifndef __H_MULTITHREAD__
#define __H_MULTITHREAD__

#include "bruteforce.h"	// Notre librairie de types pour brute-force.
#include "Simple.h"		// Nous permettra de générer les valeurs de départ de nos threads
#include <string.h>		// Pour avoir des fonctionnalités avancées sur les chaines de caractères
#include <pthread.h>	// Librairie des threads POSIX
#include <stdio.h>		// Pour les entrées / sorties
#include <stdlib.h>		// Pour les allocations dynamiques

/*
 * Type de l'argument que l'on passera à notre thread de controle.
 */
typedef struct
{
	int				nb_threads;	// Le nombre de threads sur lesquelles on cherchera
	void *			function;	// La fonction que les threads doivent lancer.
	t_bruteforce	to_crack;	// La configure du cracking.
} control_args;

/*
 * Fonction qui lancera la recherche.
 * @param to_crack Le paramétrage de la recherche.
 * @param function La fonction à exécuter par les threads de recherche.
 * @return Renvoit l'adresse du thread qui controlera les threads de recherche.
 */
void start_multithread(t_bruteforce to_crack, void * function);

/*
 * La fonction du thread qui controlera l'état de l'avancement de la recherche.
 * l'argument args devra impérativement être du type control_args.
 */
void * threads_control(void * args);

#endif
